﻿// 151. 表达式计算4.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <string>
#include <stack>
#include <cmath>

using  namespace std;

/*
https://www.acwing.com/problem/content/153/

给出一个表达式,其中运算符仅包含+,-,*,/,^（加 减 乘 整除 乘方）要求求出表达式的最终值。

数据可能会出现括号情况，还有可能出现多余括号情况。

数据保证不会出现大于或等于231的答案。

数据可能会出现负数情况。

输入格式
输入仅一行，即为表达式。

输出格式
输出仅一行，既为表达式算出的结果。

输入样例：
(2+2)^(1+1)
输出样例：
16
*/


//太繁琐 数据


int solve(string s) {
	stack<int> numSt; stack<char> flagSt;
	for (int i = 0; i < s.size(); i++) {
		if (s[i] == '(') {
			//找到匹配的 反括号
			int pairNum = 1; int j = i + 1;
			for ( j = i + 1; j < s.size(); j++) {
				if (s[j] == '(') pairNum++;
				else if (s[j] == ')') {
					pairNum--;
					if (pairNum == 0) { break; }
				}
			}
			string subStr = s.substr(i + 1, j - i-1);
			int n = solve(subStr);
			numSt.push(n);
			i = j;
		}
		else if (s[i] == '^'  || s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '\\') {
			flagSt.push(s[i]);
		}
		else {
			//找到数字的结束为止
			int j = i + 1;
			for ( j = i + 1; j < s.size(); j++) {
				if (s[j] < '0' || s[j] >'9') {
					break;
				}
			}
			string subStr = s.substr(i , j - i);
			int n = atoi(subStr.c_str());
			i = j - 1;
			numSt.push(n);
		}
	}

	//根据两个栈 结算结果；
	int ans = 0;
	while (!numSt.empty() && !flagSt.empty()) {
		int a = numSt.top(); numSt.pop(); int b = numSt.top(); numSt.pop();
		char flag = flagSt.top(); flagSt.pop();
		if (flag == '^') {
			ans = pow(a, b);
		}
		else if (flag == '+') {
			ans = a + b;
		}
		else if (flag == '-') {
			ans = a - b;
		}
		else if (flag == '*') {
			ans = a * b;
		}
		else if (flag == '/') {
			ans = a / b;
		}
		numSt.push(ans);
	}

	return ans;
}

int main()
{
	string str;
	cin >> str;
	cout << solve(str) << endl;

	return 0;
}

 